package Buscaminas.Dialogos;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;
 
@SuppressWarnings("serial")
public class DialogoOpciones extends JDialog implements ActionListener{

	/**
	 * Variables de Instancia
	 */
	/* Variables que recogera el Controlador.
	 * Estas variables son las que recogeremos en el Controlador
	 * para establecer el tama�o y minas seeleccionados
	 */
	private int alto, ancho, minas;
	
	//Variables de la vista
	private JLabel lPrincipiante1, lPrincipiante2, lIntermedio1, lIntermedio2, lAvanzado1, lAvanzado2;
	private JRadioButton rbPrincipiante, rbIntermedio, rbAvanzado, rbPersonalizada;
	
	private JLabel lAlto, lAncho, lMinas;
	private JTextField tfAlto, tfAncho, tfMinas;
	
	private JButton bAceptar, bSalir;
	
	/**
	 * Constructor
	 */
	public DialogoOpciones(){
		/*
		 * Inicializar a 0 las variables alto, ancho, minas
		 */
		alto = 0;
		ancho = 0;
		minas = 0;
		
		this.setModal(true);
		this.setTitle("Opciones");
		this.setLayout(new BorderLayout(10,10));
		// Panel para Seleccionar la dificultad
		JPanel pDificultad = new JPanel(new GridLayout(1,2));				this.add("North",pDificultad);
		pDificultad.setBorder(new TitledBorder("Dificultad"));
		
		JPanel pDificultadIzquierda = new JPanel(new GridLayout(3,1,10,10));pDificultad.add(pDificultadIzquierda);
		JPanel pDifIzqPrincipiante = new JPanel(new GridLayout(3,1));		pDificultadIzquierda.add(pDifIzqPrincipiante);
		lPrincipiante1 = new JLabel("       Principiante");					pDifIzqPrincipiante.add(lPrincipiante1);
		rbPrincipiante = new JRadioButton("10 minas");						pDifIzqPrincipiante.add(rbPrincipiante);
		lPrincipiante2 = new JLabel("       9 x 9 mosaicos");				pDifIzqPrincipiante.add(lPrincipiante2);		rbPrincipiante.setSelected(true);
		
		JPanel pDifIzqIntermedio = new JPanel(new GridLayout(3,1));			pDificultadIzquierda.add(pDifIzqIntermedio);
		lIntermedio1 = new JLabel("       Intermedio");						pDifIzqIntermedio.add(lIntermedio1);
		rbIntermedio = new JRadioButton("40 minas");						pDifIzqIntermedio.add(rbIntermedio);
		lIntermedio2 = new JLabel("       16 x 16 mosaicos");				pDifIzqIntermedio.add(lIntermedio2);
		
		JPanel pDifIzqAvanzado = new JPanel(new GridLayout(3,1));			pDificultadIzquierda.add(pDifIzqAvanzado);
		lAvanzado1 = new JLabel("       Avanzado");							pDifIzqAvanzado.add(lAvanzado1);
		rbAvanzado = new JRadioButton("99 minas");							pDifIzqAvanzado.add(rbAvanzado);
		lAvanzado2 = new JLabel("       16 x 30 mosaicos");					pDifIzqAvanzado.add(lAvanzado2);
		
		
		JPanel pDificultadDerecha = new JPanel(new BorderLayout());			pDificultad.add(pDificultadDerecha);
		rbPersonalizada = new JRadioButton("Personalizada");				pDificultadDerecha.add("North",rbPersonalizada);
		JPanel pDificultadDerechaDatos = new JPanel(new FlowLayout(FlowLayout.RIGHT));	pDificultadDerecha.add("Center",pDificultadDerechaDatos);
		JPanel pAlto = new JPanel(new BorderLayout());						pDificultadDerechaDatos.add(pAlto);
		lAlto = new JLabel("Alto (9-24):          ");						pAlto.add("West",lAlto);
		tfAlto = new JTextField("9",5);										pAlto.add("East",tfAlto);
		JPanel pAncho = new JPanel(new BorderLayout());						pDificultadDerechaDatos.add(pAncho);
		lAncho = new JLabel("Ancho (9-30):     ");							pAncho.add("West",lAncho);
		tfAncho = new JTextField("9",5);									pAncho.add("East",tfAncho);
		JPanel pMinas = new JPanel(new BorderLayout());						pDificultadDerechaDatos.add(pMinas);
		lMinas = new JLabel("Minas (10-668): ");							pMinas.add("West",lMinas);
		tfMinas = new JTextField("10",5);									pMinas.add("East",tfMinas);
		
		tfAlto.setEditable(false);
		lAlto.setEnabled(false);
		tfAncho.setEditable(false);
		lAncho.setEnabled(false);
		tfMinas.setEditable(false);
		lMinas.setEnabled(false);
		
		// Panel Botones Aceptar, Salir
		JPanel pBotones = new JPanel(new BorderLayout());					this.add("South", pBotones);
		bAceptar = new JButton("Aceptar");									pBotones.add("West",bAceptar);
		bSalir = new JButton("Salir");								pBotones.add("East",bSalir);
		
		//Grupo RadioButton//
		ButtonGroup bg = new ButtonGroup();
		bg.add(rbPrincipiante);
		bg.add(rbIntermedio);
		bg.add(rbAvanzado);
		bg.add(rbPersonalizada);
		////////////////////
		
		// A�adir el control
		rbPrincipiante.addActionListener(this);
		rbIntermedio.addActionListener(this);
		rbAvanzado.addActionListener(this);
		rbPersonalizada.addActionListener(this);
		bAceptar.addActionListener(this);
		bSalir.addActionListener(this);
		
		// Control de cierre, pack, setVisible,...
		this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
		this.setPreferredSize(new Dimension(374,325));
		this.pack();
		this.setVisible(true);
		this.setResizable(false);
	}
	
	/**
	 * ActionListener
	 */
	public void actionPerformed(ActionEvent e) {
		try{
	
			if(e.getSource()==rbPrincipiante){// Principiante
				tfAlto.setEditable(false);
				lAlto.setEnabled(false);
				tfAncho.setEditable(false);
				lAncho.setEnabled(false);
				tfMinas.setEditable(false);
				lMinas.setEnabled(false);
			}
			if(e.getSource()==rbIntermedio){// Intermedio
				tfAlto.setEditable(false);
				lAlto.setEnabled(false);
				tfAncho.setEditable(false);
				lAncho.setEnabled(false);
				tfMinas.setEditable(false);
				lMinas.setEnabled(false);
			}
			if(e.getSource()==rbAvanzado){// Avanzado
				tfAlto.setEditable(false);
				lAlto.setEnabled(false);
				tfAncho.setEditable(false);
				lAncho.setEnabled(false);
				tfMinas.setEditable(false);
				lMinas.setEnabled(false);
			}
			if(e.getSource()==rbPersonalizada){// Personalizada
				tfAlto.setEditable(true);
				lAlto.setEnabled(true);
				tfAncho.setEditable(true);
				lAncho.setEnabled(true);
				tfMinas.setEditable(true);
				lMinas.setEnabled(true);
			}
			
			if(e.getSource()==bAceptar){// Aceptar
				
				if(rbPrincipiante.isSelected()){
					alto = 9;
					ancho = 9;
					minas = 10;
				}
				
				if(rbIntermedio.isSelected()){
					alto = 16;
					ancho = 16;
					minas = 40;
				}
				
				if(rbAvanzado.isSelected()){
					alto = 16;
					ancho = 30;
					minas = 99;
				}
				
				if(rbPersonalizada.isSelected()){
					alto = Integer.valueOf(tfAlto.getText());
					ancho = Integer.valueOf(tfAncho.getText());
					minas = Integer.valueOf(tfMinas.getText());
				}
				
				if(alto < 9 || alto > 24 || ancho < 9 || ancho > 30 || minas < 10 || minas > 668){// Controlar valores de entrada
					
					throw new ExcepcionOpciones();
				
				}
	
				this.setVisible(false);
				
			}
			
			if(e.getSource()==bSalir){// si se pulsa salir, las variables alto, ancho, minas se quedan en 0, de esta manera podemos saber que se ha cancelado
				System.exit(0);
			}
		}//End try
		
		catch (ExcepcionOpciones e1) {
			JOptionPane.showMessageDialog(this, "Por favor, introduzca un valor v�lido.", "Error",
					JOptionPane.ERROR_MESSAGE);// Mensaje de error
		}
	}
	
	/**
	 * Get
	 */

	public int getAlto() {return alto;}
	public int getAncho() {return ancho;}
	public int getMinas() {return minas;}
	public JLabel getlPrincipiante1() {return lPrincipiante1;}
	public JLabel getlPrincipiante2() {return lPrincipiante2;}
	public JLabel getlIntermedio1() {return lIntermedio1;}
	public JLabel getlIntermedio2() {return lIntermedio2;}
	public JLabel getlAvanzado1() {return lAvanzado1;}
	public JLabel getlAvanzado2() {return lAvanzado2;}
	public JRadioButton getRbPrincipiante() {return rbPrincipiante;}
	public JRadioButton getRbIntermedio() {return rbIntermedio;}
	public JRadioButton getRbAvanzado() {return rbAvanzado;}
	public JRadioButton getRbPersonalizada() {return rbPersonalizada;}
	public JLabel getlAlto() {return lAlto;}
	public JLabel getlAncho() {return lAncho;}
	public JLabel getlMinas() {return lMinas;}
	public JTextField getTfAlto() {return tfAlto;}
	public JTextField getTfAncho() {return tfAncho;}
	public JTextField getTfMinas() {return tfMinas;}
	public JButton getbAceptar() {return bAceptar;}
	public JButton getbSalir() {return bSalir;}
	
	
}
